home *** CD-ROM | disk | FTP | other *** search
/ Software USA 3 #11 / Software USA Volume 3.11.iso / mac / Games / World Builder / Ray's World Builder Demo / "Robot Room" Code < prev    next >
Text File  |  1995-11-27  |  29KB  |  431 lines

  1. By Ray R. Dunakin III
  2.  
  3. This contains the complete scene code for the scene titled “Robot Room.” Following this, the code is broken down into sections, with explanations of each section.
  4.  
  5. *****************************************************
  6.  
  7. IF{LOOP#=0}OR{TEXT$=LOOK}THEN
  8.     PRINT{You are in another room, with a robot standing in the corner. There is an open doorway to the SOUTH, and the room continues to the EAST.}
  9.     IF{ROBOT.HEAD>SCENE@}THEN
  10.         PRINT{......................................}
  11.         PRINT{The robot's head is missing.}
  12.     END
  13.     IF{ROBOT.HEAD=SCENE@}AND{ROBOT.POWER=SCENE@}THEN
  14.         PRINT{......................................}
  15.         PRINT{TOBOR: "Welcome back, pal."}
  16.     END
  17.     PRINT{......................................}
  18.     PRINT{You are facing EAST.}
  19. END
  20. IF{TEXT$=USE}OR{TEXT$=PUT}THEN
  21.     PRINT{......................................}
  22.     IF{TEXT$=ROBOT}THEN
  23.         PRINT{You can't take the robot anywhere. What do you want to do with it?}
  24.     EXIT
  25.     IF{TEXT$=HEAD}THEN
  26.         IF{HEAD=PLAYER@}THEN
  27.             SOUND{PISTOL-COCKING.1}
  28.             MOVE{ROBOT.HEAD}TO{SCENE@}
  29.             MOVE{HEAD}TO{STORAGE@}
  30.             PRINT{The robot's head locks into place.}
  31.             IF{ROBOT.POWER=SCENE@}THEN
  32.                 SOUND{HELLO}
  33.                 PRINT{The robot's eyes light up as soon as the head is in place, and the robot begins to speak.}
  34.                 PRINT{TOBOR: "Oh thank God, that feels much better! It's so creepy being headless.}
  35.                 PRINT{"I'm Tobor. Pleased to meet you, pal."}
  36.             EXIT
  37.             PRINT{However, the robot is still lifeless. It seems to lack power.}
  38.         EXIT
  39.         PRINT{The only head you have is your own. You should use it to find the robot's head!}
  40.     EXIT
  41.     IF{TEXT$=UNIT}THEN
  42.         IF{UNIT=PLAYER@}THEN
  43.             SOUND{PISTOL-COCKING.1}
  44.             MOVE{ROBOT.POWER}TO{SCENE@}
  45.             MOVE{UNIT}TO{STORAGE@}
  46.             PRINT{The power unit snaps into place, and the robot's body begins to hum softly as energy courses through it.}
  47.             IF{ROBOT.HEAD=SCENE@}THEN
  48.                 SOUND{HELLO}
  49.                 PRINT{The robot's eyes light up as soon as the power unit is in place, and the robot begins to speak.}
  50.                 PRINT{TOBOR: "...huh..wha? Hey, I'm awake again! Thanks pal.}
  51.                 PRINT{"I'm Tobor. Nice meeting you."}
  52.             EXIT
  53.             PRINT{However, nothing more happens. Perhaps if the robot had a head...}
  54.         EXIT
  55.         PRINT{You don't have the robot's power unit.}
  56.     EXIT
  57.     IF{TEXT$=RAM}OR{TEXT$=CHIP}THEN
  58.         PRINT{TOBOR: "Oh man, I'm dyin' for a nice crunchy RAMchip! But you can't install it yourself. I have to do it."}
  59.     EXIT
  60. END
  61. IF{TEXT$=GET}OR{TEXT$=TAKE}OR{TEXT$=MOVE}THEN
  62.     PRINT{......................................}
  63.     IF{TEXT$=ROBOT}OR{TEXT$=BODY}THEN
  64.         PRINT{The robot is too heavy to move.}
  65.     EXIT
  66.     IF{TEXT$=HEAD}AND{ROBOT.HEAD=SCENE@}THEN
  67.         PRINT{You should leave the robot's head on its body. It's no good to you otherwise.}
  68.     EXIT
  69.     IF{TEXT$=POWER}OR{TEXT$=UNIT}THEN
  70.         IF{ROBOT.POWER=SCENE@}THEN
  71.             PRINT{You have no other use for the power unit. Leave it in the robot.}
  72.         EXIT
  73.     END
  74. END
  75. IF{TEXT$=SHOOT}OR{TEXT$=FIRE PISTOL}THEN
  76.     PRINT{......................................}
  77.     IF{PISTOL>PLAYER@}THEN
  78.         PRINT{You don't have a gun.}
  79.     EXIT
  80.     IF{ROBOT.HEAD>SCENE@}OR{ROBOT.POWER>SCENE@}THEN
  81.         PRINT{Don't shoot the robot, it may be useful to you later!}
  82.     EXIT
  83.     SOUND{RICOCHET}
  84.     PRINT{The bullet bounces off the robot's metal hide.}
  85.     PRINT{TOBOR: "Hey! What do you think you're doing, stinkweed?! Two can play at that game!}
  86.     SOUND{PULSE.2}
  87.     PRINT{The robot fires a pulse beam at you, which stuns you and gives you a nastly burn.}
  88.     SOUND{OUCH}
  89.     LET{PHYS.HIT.CUR#=PHYS.HIT.CUR#-30}
  90. EXIT
  91. IF{TEXT$=SWING}OR{TEXT$=HIT}OR{TEXT$=THROW}THEN
  92.     PRINT{......................................}
  93.     IF{ROBOT.HEAD>SCENE@}OR{ROBOT.POWER>SCENE@}THEN
  94.         PRINT{Don't damage the robot, it may be useful to you later!}
  95.     EXIT
  96.     SOUND{CLANG}
  97.     PRINT{Your attack fails to penetrate the robot's metal skin.}
  98.     PRINT{TOBOR: "Hey, don't mess up the paint job, stinkweed!"}
  99.     SOUND{PULSE.2}
  100.     PRINT{The robot fires a pulse beam at you, which stuns you and gives you a nastly burn.}
  101.     SOUND{OUCH}
  102.     LET{PHYS.HIT.CUR#=PHYS.HIT.CUR#-40}
  103. EXIT
  104. IF{CLICK$=ROBOT.BODY}OR{CLICK$=ROBOT.HEAD}OR{CLICK$=ROBOT.POWER}THEN
  105.     PRINT{......................................}
  106. END
  107. IF{CLICK$=ROBOT.BODY}THEN
  108.     IF{ROBOT.HEAD>SCENE@}THEN
  109.         PRINT{The robot's body is too heavy to be moved. The robot is missing its head.}
  110.         IF{ROBOT.POWER>SCENE@}THEN
  111.             PRINT{There is a rectangular hole in the robot's chest. Some component seems to be missing.}
  112.         EXIT
  113.     EXIT
  114.     IF{ROBOT.POWER>SCENE@}THEN
  115.         PRINT{There is a rectangular hole in the robot's chest. Some component seems to be missing, perhaps the power supply.}
  116.     EXIT
  117.     PRINT{TOBOR: "Hey cut it out, that tickles!"}
  118. EXIT
  119. IF{TEXT$=TALK}THEN
  120.     PRINT{......................................}
  121.     IF{ROBOT.HEAD>SCENE@}THEN
  122.         PRINT{The robot can't talk, it doesn't have a head.}
  123.     EXIT
  124.     IF{ROBOT.POWER>SCENE@}THEN
  125.         PRINT{The robot is lifeless. It needs a power unit.}
  126.     EXIT
  127.     IF{T1#<1}THEN
  128.         PRINT{TOBOR: "Thanks for putting my head back, and restoring my power! I've been sitting there an awfully long time.}
  129.         PRINT{"My hoverskirt is still damaged though, so I can't move. But there's nothing you can do about that.}
  130.         PRINT{"By the way, I'm an object. Like the guy at the beginning of the game, my actions are controlled by the scene code. That's what allows me to talk to you. I can defend myself too, if you are so foolish as to attack me!}
  131.         PRINT{"But I'd much rather talk."}
  132.         LET{T1#=1}
  133.     EXIT
  134.     IF{T1#=1}THEN
  135.         PRINT{TOBOR: "Well let's see... oh yeah. I was supposed to tell you that only the full moon can provide the combination to the safe.}
  136.         PRINT{"I have no idea what that means. Ray just wanted me to tell you that. See, it's in the script.}
  137.         PRINT{"It's pretty boring just sitting here all the time. I wish Ray had given me a working hoverskirt."}
  138.         PRINT{"But it could be worse. At least I'm not stranded on a satellite and forced to watch bad movies. If I had to sit through Mitchell or Manos: The Hands of Fate, I'd tear my own head off!"}
  139.         LET{T1#=2}
  140.     EXIT
  141.     IF{T1#=2}THEN
  142.         PRINT{TOBOR: "If you see a rocket anywhere, you should say the magic word. For some reason that's pretty important.}
  143.         PRINT{"I don't remember what the magic word is. I'll have to search my data files and see if I can find it. Maybe by the time you talk to me again I might be able to remember it."}
  144.         LET{T1#=3}
  145.     EXIT
  146.     IF{T1#=3}THEN
  147.         PRINT{TOBOR: "Sorry, I still can't remember the magic word. But it's a four letter word that starts with H.}
  148.         PRINT{"And there should be some kind of clue about it in a nearby scene.}
  149.         PRINT{"One more thing you should know: A User Variable keeps track of my conversation with you, so that each time you talk to me I'll say something new, instead of the same thing over and over."}
  150.         LET{T1#=4}
  151.     EXIT
  152.     IF{T1#=4}THEN
  153.         PRINT{TOBOR: "Sorry, I've run out of things to say. I wish I was more like TV's wisecracking Crow, or the urbane Tom Servo. Those two are never at a loss for words!}
  154.         PRINT{"I especially wish I had Tom's singing voice! Not to mention his great dance moves. For a guy with a hoverskirt and useless arms, he sure can cut a rug!"}
  155.         LET{T1#=5}
  156.     EXIT
  157.     PRINT{TOBOR: "Sorry pal, I haven't heard anything new."}
  158. EXIT
  159. IF{TEXT$=OFFER}OR{TEXT$=GIVE}THEN
  160.     PRINT{......................................}
  161.     IF{ROBOT.HEAD>SCENE@}THEN
  162.         PRINT{The robot can't take anything from you, since it doesn't have a head.}
  163.     EXIT
  164.     IF{ROBOT.POWER>SCENE@}THEN
  165.         PRINT{The robot is lifeless and can't take anything from you.}
  166.     EXIT
  167.     IF{TEXT$=RAM}OR{TEXT$=CHIP}THEN
  168.         IF{RAMCHIP>PLAYER@}THEN
  169.             PRINT{TOBOR: "Hey, you don't have any RAMchips! Don't tease me like that!"}
  170.         EXIT
  171.         MOVE{RAMCHIP}TO{STORAGE@}
  172.         LET{X1#=10}
  173.         PRINT{TOBOR: "Wow, thanks pal! Man, I love those things! Here, let me give you a little something for that."}
  174.         PRINT{Tobor takes the RAMchip and swallows it eagerly, then hands you some coins. You now have $10!}
  175.     EXIT
  176.     PRINT{TOBOR: "No thanks, I couldn't really do anything with that. But I'd sure love some nice crunchy RAMchips!"}
  177. EXIT
  178.  
  179. **************End of code*************************
  180.  
  181.  
  182. In this scene, there is a robot body that is missing its head and power unit. The player must find and attach both the head and the unit. Then he can talk to the robot and receive important clues to the game. Each time the player talks to the robot, the robot will tell him something new, until the robot runs out of things to say. The player can also give a chip to the robot, and receive money from it in trade.
  183.  
  184. The first section of code handles the scene description. The description of the scene can be altered, depending on whether the robot has its head off, or is rebuilt and operating normally:
  185.  
  186. IF{LOOP#=0}OR{TEXT$=LOOK}THEN
  187.     PRINT{You are in another room, with a robot standing in the corner. There is an open doorway to the SOUTH, and the room continues to the EAST.}
  188.     IF{ROBOT.HEAD>SCENE@}THEN
  189.         PRINT{......................................}
  190.         PRINT{The robot's head is missing.}
  191.     END
  192.     IF{ROBOT.HEAD=SCENE@}AND{ROBOT.POWER=SCENE@}THEN
  193.         PRINT{......................................}
  194.         PRINT{TOBOR: "Welcome back, pal."}
  195.     END
  196.     PRINT{......................................}
  197.     PRINT{You are facing NORTH.}
  198. END
  199.  
  200. >>>The first statement in the code above tests to see if the loop # is zero, meaning the player has just come into the scene; or that the player has entered the word “look.” If either of these conditions is true, then the beginning of the scene description is printed. Then a nested statement tests to see if the object that is a drawing of the robot’s head on its body is not in the scene. If this object is not in the scene, the statement is true, and text is printed telling the player that the head is not on the body.
  201.  
  202. Another nested statement tests two conditions. First, it checks to see if the robot’s head is on; then it checks to see if the power unit object is in the scene. The statement is true only if BOTH of these conditions are true. This means that the robot has its head and is fully powered and operable. If so then text is printed giving a greeting from the robot to the returning player. (We know the player has been here before, since only the player could have put the robot back together.)
  203.  
  204. Finally, the rest of the standard description is printed, telling the player which direction he is facing in this scene. Remember, if one or both of the nested statements is false, the false statements will be ignored, and only the text in the original IF/THEN statement is printed.<<<
  205.  
  206.  
  207. The next section of code handles the verbs “use” and “put.” “Use is the standard command verb in games of this type, for times when the player wants to use an object in his or her inventory. In this case, there is a chance that some players might use the word “put” instead, as in “Put the head on the robot.” So, that word is added to this code, and is treated exactly the same as “use:”
  208.  
  209. IF{TEXT$=USE}OR{TEXT$=PUT}THEN
  210.     PRINT{......................................}
  211.     IF{TEXT$=HEAD}THEN
  212.         IF{HEAD=PLAYER@}THEN
  213.             SOUND{PISTOL-COCKING.1}
  214.             MOVE{ROBOT.HEAD}TO{SCENE@}
  215.             MOVE{HEAD}TO{STORAGE@}
  216.             PRINT{The robot's head locks into place.}
  217.             IF{ROBOT.POWER=SCENE@}THEN
  218.                 SOUND{HELLO}
  219.                 PRINT{The robot's eyes light up as soon as the head is in place, and the robot begins to speak.}
  220.                 PRINT{TOBOR: "Oh thank God, that feels much better! It's so creepy being headless.}
  221.                 PRINT{"I'm Tobor. Pleased to meet you, pal."}
  222.             EXIT
  223.             PRINT{However, the robot is still lifeless. It seems to lack power.}
  224.         EXIT
  225.         PRINT{The only head you have is your own. You should use it to find the robot's head!}
  226.     EXIT
  227.     IF{TEXT$=UNIT}THEN
  228.         IF{UNIT=PLAYER@}THEN
  229.             SOUND{PISTOL-COCKING.1}
  230.             MOVE{ROBOT.POWER}TO{SCENE@}
  231.             MOVE{UNIT}TO{STORAGE@}
  232.             PRINT{The power unit snaps into place, and the robot's body begins to hum softly as energy courses through it.}
  233.             IF{ROBOT.HEAD=SCENE@}THEN
  234.                 SOUND{HELLO}
  235.                 PRINT{The robot's eyes light up as soon as the power unit is in place, and the robot begins to speak.}
  236.                 PRINT{TOBOR: "...huh..wha? Hey, I'm awake again! Thanks pal.}
  237.                 PRINT{"I'm Tobor. Nice meeting you."}
  238.             EXIT
  239.             PRINT{However, nothing more happens. Perhaps if the robot had a head...}
  240.         EXIT
  241.         PRINT{You don't have the robot's power unit.}
  242.     EXIT
  243.     IF{TEXT$=RAM}OR{TEXT$=CHIP}THEN
  244.         PRINT{TOBOR: "Oh man, I'm dyin' for a nice crunchy RAMchip! But you can't install it yourself. I have to do it."}
  245.     EXIT
  246.     IF{TEXT$=ROBOT}THEN
  247.         PRINT{You can't take the robot anywhere. What do you want to do with it?}
  248.     EXIT 
  249. END
  250.  
  251. >>>The first statement in the code above tests for entry of the words “use” or “put.” If either of these words have been entered, then the first nested statement checks to see if the word “head” has also been entered. If this is true, then another statement tests to see if the player has the robot’s head. If this is also true, then the “head” object is moved to storage, and an immobile object representing the attached head is moved to the scene. A mechanical clicking sound it played, and text is printed that tells the player the head is now in place on the robot. 
  252.  
  253. Since the robot can only come to life when both the head AND the power unit are in place, another statement tests to see if the unit has been installed. An immobile object called “ROBOT.POWER” is used to depict the installed unit. If it is in the scene, then additional text is printed, simulating the robot’s response as it is brought to life. If the unit has not been installed, that statement is ignored, and the rest of the “head” text is printed, telling the player that the robot still lacks power.
  254.  
  255. The next segment of the above code handles installation of the power unit. It is similar to the segment dealing with use of the head. A conditional statement tests for entry of the word “unit.” Another statement nested in that one tests to see if the player has the unit, and if so, moves the unit to storage and moves the ROBOT.POWER object to the scene. Then another statement tests to see if the head has already been installed, and if so, prints the robot’s response.
  256.  
  257. The third nested statement in the “use” statement tests for entry of the words “ram” or “chip.” This is in case the player tries to install the ramchip himself, instead of giving it to the robot. (Since the player can’t get to the chip until after the robot has been assembled, there is no need for another statement testing whether or not the robot has been assembled.) If the player has tried to “use” the chip, then text is printed, indicating that the robot wants the chip, but must install it himself.
  258.  
  259. Finally, the last statement nested in the “use/put” statement tests for entry of the word “robot.” This is in case the player tries to “use the robot,” in which case he is told that it is too heavy to move, and the player is prompted for a more specific action. The entire “use/put” statement closes with END, so that if the player tries to use some object other than these, the program will skip all the nested statements and continue to the Global code, where a default response tells the player, “That doesn’t work.”<<<
  260.  
  261.  
  262. Next code section (below) handles any attempts to move or take things in the scene. It is pretty simple and self-explanatory. If the player tries to move the robot, he will be told it is too heavy. If he tries to take the head, AND the head is attached to the robot, he will be told to leave it on. The third nested statement checks to see if the player has entered the words “power” or “unit,” and if so, another statement within that one checks to see if it has been installed in the robot. If so, the player is told to leave it in place. If not, that statement is ignored, and the “power/unit” statement closes with END, so that the unit will be automatically moved to the player if the player is trying to pick up the unit after dropping it at the scene.
  263.  
  264.  
  265. IF{TEXT$=GET}OR{TEXT$=TAKE}OR{TEXT$=MOVE}THEN
  266.     PRINT{......................................}
  267.     IF{TEXT$=ROBOT}OR{TEXT$=BODY}THEN
  268.         PRINT{The robot is too heavy to move.}
  269.     EXIT
  270.     IF{TEXT$=HEAD}AND{ROBOT.HEAD=SCENE@}THEN
  271.         PRINT{You should leave the robot's head on its body. It's no good to you otherwise.}
  272.     EXIT
  273.     IF{TEXT$=POWER}OR{TEXT$=UNIT}THEN
  274.         IF{ROBOT.POWER=SCENE@}THEN
  275.             PRINT{You have no other use for the power unit. Leave it in the robot.}
  276.         EXIT
  277.     END
  278. END
  279.  
  280.  
  281. The section below handles any attempt by the player to shoot the robot. Since the robot is actually an Object and not a Character, attacks must be handled with scene code:
  282.  
  283. IF{TEXT$=SHOOT}OR{TEXT$=FIRE}THEN
  284.     PRINT{......................................}
  285.     IF{PISTOL>PLAYER@}THEN
  286.         PRINT{You don't have a gun.}
  287.     EXIT
  288.     IF{ROBOT.HEAD>SCENE@}OR{ROBOT.POWER>SCENE@}THEN
  289.         PRINT{Don't shoot the robot, it may be useful to you later!}
  290.     EXIT
  291.     SOUND{RICOCHET}
  292.     PRINT{The bullet bounces off the robot's metal hide.}
  293.     PRINT{TOBOR: "Hey! What do you think you're doing, stinkweed?! Two can play at that game!}
  294.     SOUND{PULSE.2}
  295.     PRINT{The robot fires a pulse beam at you, which stuns you and gives you a nastly burn.}
  296.     SOUND{OUCH}
  297.     LET{PHYS.HIT.CUR#=PHYS.HIT.CUR#-30}
  298. EXIT
  299.  
  300. >>>The first statement in the code above tests for use of the words “shoot” or “fire.” (Fire is the verb to use the pistol in the Weapons Menu.) If either word has been entered, then the first nested statement checks to see if the player has the pistol. If the pistol is not in the player’s possession, then text is printed telling him he does not have a gun, and the program stops there until the player’s next command. If the player does have the pistol, that statement is ignored and the program continues.
  301.  
  302. The next nested statement checks to see if both the head and the power unit have been installed in the robot. If either of these objects is not in the scene, then text is printed telling the player that he shouldn’t shoot the robot, since it may be useful after it is activated. The program stops there until the player’s next command. If BOTH the head and the unit are installed, then the statement is ignored and the program continues.
  303.  
  304. Now, having determined that the player has the pistol, and that the robot is activated, the attack is executed. First a sound is played of a ricochet, and text tells the player that his shot has merely bounced off the robot. Then the robot’s verbal response is printed. Finally, the sound of the robot’s weapon is played, and the player’s hit points are reduced as text is printed telling him he’s been injured by the robot’s attack. The player’s current hit points are represented by the variable PHYS.HIT.CUR#
  305.  
  306. The entire statement closes with EXIT, and the program stops until the player’s next command (or click).<<<
  307.  
  308.  
  309. This is followed by a brief section of code that handles the player’s attempts to use other weapons against the robot, such as fists or throwing objects. Since there is no need to determine if the player has such weapons in his possession, that part of the code is not included. The rest of the code is almost identical to the “shoot” section:
  310.  
  311. IF{TEXT$=SWING}OR{TEXT$=HIT}OR{TEXT$=THROW}THEN
  312.     PRINT{......................................}
  313.     IF{ROBOT.HEAD>SCENE@}OR{ROBOT.POWER>SCENE@}THEN
  314.         PRINT{Don't damage the robot, it may be useful to you later!}
  315.     EXIT
  316.     SOUND{CLANG}
  317.     PRINT{Your attack fails to penetrate the robot's metal skin.}
  318.     PRINT{TOBOR: "Hey, don't mess up the paint job, stinkweed!"}
  319.     SOUND{PULSE.2}
  320.     PRINT{The robot fires a pulse beam at you, which stuns you and gives you a nastly burn.}
  321.     SOUND{OUCH}
  322.     LET{PHYS.HIT.CUR#=PHYS.HIT.CUR#-40}
  323. EXIT
  324.  
  325. >>>When the player tries to swing his fist, a sword, a knife, or other weapon; or tries throw something at the robot, the first nested statement determines if the robot’s head and power unit are both in place. If either of them is not in place, the text tells the player not to damage the robot. If they are BOTH in place, that statement is skipped and the attack is executed. In this case, the attack proves futile, and the robot’s counter-attack damages the player’s hit points. 
  326.  
  327. It is possible to have the target of the player’s attack suffer damage or death too, but I did not include that in this simple game. It is also possible to add a random element of chance to both attack and counter-attack, to cause occasional misses. You can even use a variable to keep track of and reduce the player’s ammunition. All these have been left out for purposes of simplicity.<<<
  328.  
  329.  
  330. This next very brief statement simply prints a seperation line of periods before the object descriptions are printed, whenever the player clicks on the immobile objects in the scene.
  331.  
  332. IF{CLICK$=ROBOT.BODY}OR{CLICK$=ROBOT.HEAD}OR{CLICK$=ROBOT.POWER}THEN
  333.     PRINT{......................................}
  334. END
  335.  
  336.  
  337. The section of code below is used to provide changing information when the player clicks on the robot:
  338.  
  339. IF{CLICK$=ROBOT.BODY}THEN
  340.     IF{ROBOT.HEAD>SCENE@}THEN
  341.         PRINT{The robot's body is too heavy to be moved. The robot is missing its head.}
  342.         IF{ROBOT.POWER>SCENE@}THEN
  343.             PRINT{There is a rectangular hole in the robot's chest. Some component seems to be missing.}
  344.         EXIT
  345.     EXIT
  346.     IF{ROBOT.POWER>SCENE@}THEN
  347.         PRINT{There is a rectangular hole in the robot's chest. Some component seems to be missing, perhaps the power supply.}
  348.     EXIT
  349.     PRINT{TOBOR: "Hey cut it out, that tickles!"}
  350. EXIT
  351.  
  352. >>>The first statement above detects when the player clicks on the robot’s body, an object called “ROBOT.BODY.” If this is true, then a nested statement determines if the robot’s head has not been installed. If not, then text is printed telling the player that the robot is too heavy to move, and that its head is missing. Another statement nested in that one checks to see if the power unit has been installed, and if not, tells the player that a component is missing.
  353.  
  354. If the head is in place, the “head” statement is ignored, and another statement tests to see if the power unit is in place. If not, then the player is told that the robot’s power unit is missing.
  355.  
  356. If  both the head the power unit are in place, then both nested statements are ignored, and text is printed which gives the robot’s response to being touched.<<<
  357.  
  358.  
  359. The section below is long, but not very complex. It handles the robot’s conversation with the player. In this case, the player just enters the word “talk” when he wants to get information from the robot. “Talk” is the standard command used in these situations, however some players may use “ask” or “info,” so those are include too, and are treated the same as “talk.” The first two nested statements check to see if the head and power unit have been installed. If either one is missing, then teh player is informed that this is the reason the robot cannot respond:
  360.  
  361. IF{TEXT$=TALK}OR{TEXT$=ASK}OR{TEXT$=INFO}THEN
  362.     PRINT{......................................}
  363.     IF{ROBOT.HEAD>SCENE@}THEN
  364.         PRINT{The robot can't talk, it doesn't have a head.}
  365.     EXIT
  366.     IF{ROBOT.POWER>SCENE@}THEN
  367.         PRINT{The robot is lifeless. It needs a power unit.}
  368.     EXIT
  369.     IF{T1#<1}THEN
  370.         PRINT{TOBOR: "Thanks for putting my head back, and restoring my power! I've been sitting there an awfully long time.}
  371.         PRINT{"My hoverskirt is still damaged though, so I can't move. But there's nothing you can do about that.}
  372.         PRINT{"By the way, I'm an object. Like the guy at the beginning of the game, my actions are controlled by the scene code. That's what allows me to talk to you. I can defend myself too, if you are so foolish as to attack me!}
  373.         PRINT{"But I'd much rather talk."}
  374.         LET{T1#=1}
  375.     EXIT
  376.     IF{T1#=1}THEN
  377.         PRINT{TOBOR: "Well let's see... oh yeah. I was supposed to tell you that only the full moon can provide the combination to the safe.}
  378.         PRINT{"I have no idea what that means. Ray just wanted me to tell you that. See, it's in the script.}
  379.         PRINT{"It's pretty boring just sitting here all the time. I wish Ray had given me a working hoverskirt."}
  380.         PRINT{"But it could be worse. At least I'm not stranded on a satellite and forced to watch bad movies. If I had to sit through Mitchell or Manos: The Hands of Fate, I'd tear my own head off!"}
  381.         LET{T1#=2}
  382.     EXIT
  383.     IF{T1#=2}THEN
  384.         PRINT{TOBOR: "If you see a rocket anywhere, you should say the magic word. For some reason that's pretty important.}
  385.         PRINT{"I don't remember what the magic word is. I'll have to search my data files and see if I can find it. Maybe by the time you talk to me again I might be able to remember it."}
  386.         LET{T1#=3}
  387.     EXIT
  388.     IF{T1#=3}THEN
  389.         PRINT{TOBOR: "Sorry, I still can't remember the magic word. But it's a four letter word that starts with H.}
  390.         PRINT{"And there should be some kind of clue about it in a nearby scene.}
  391.         PRINT{"One more thing you should know: A User Variable keeps track of my conversation with you, so that each time you talk to me I'll say something new, instead of the same thing over and over."}
  392.         LET{T1#=4}
  393.     EXIT
  394.     IF{T1#=4}THEN
  395.         PRINT{TOBOR: "Sorry, I've run out of things to say. I wish I was more like TV's wisecracking Crow, or the urbane Tom Servo. Those two are never at a loss for words!}
  396.         PRINT{"I especially wish I had Tom's singing voice! Not to mention his great dance moves. For a guy with a hoverskirt and useless arms, he sure can cut a rug!"}
  397.         LET{T1#=5}
  398.     EXIT
  399.     PRINT{TOBOR: "Sorry pal, I haven't heard anything new."}
  400. EXIT
  401.  
  402. >>>In the above section, a variable (T1#) is used to keep track of how many times the player has talked to the robot. The first time the player enters “talk,” the variable has not yet been set, and so it is less then one. A nested statement checks for this condition, and if it is true, then the robot’s first speech is printed, and the variable is updated to equal one, using the LET command.
  403.  
  404. Each of the remaining statements test for the value of T1#, and when each statement is true, the appropriate text is printed, and the variable is incremented upward. Finally, when the robot has nothing new to say, the variable is allowed to remain constant, and any further attempts to talk to the robot will always receive the same reply, “Sorry pal, I haven’t heard anything new.”<<<
  405.  
  406.  
  407. The code below handles the player’s attempts to give things to the robot. The first two nested statements test to see if the head and unit are installed. If not, then the text is printed which informs the player of this. The third nested statement determines whether the player has also entered the words “ram” or “chip.” If so, then another statement nested in that one checks to see if the player actually has the RAMchip. If he doesn’t have it, then some text is printed telling the player that he doesn’t have the RAMchip, and that the robot would like to have one. If he does have the chip, that statement is ignored, and the program continues with the exchange. The RAMchip is moved to storage, and the variable X1# is increased to ten. This is the variable I used to keep track of how much money the player has. Then text is printed, telling the player that the robot has accepted the chip, and has given him some cash for it.
  408.  
  409.  
  410. IF{TEXT$=OFFER}OR{TEXT$=GIVE}THEN
  411.     PRINT{......................................}
  412.     IF{ROBOT.HEAD>SCENE@}THEN
  413.         PRINT{The robot can't take anything from you, since it doesn't have a head.}
  414.     EXIT
  415.     IF{ROBOT.POWER>SCENE@}THEN
  416.         PRINT{The robot is lifeless and can't take anything from you.}
  417.     EXIT
  418.     IF{TEXT$=RAM}OR{TEXT$=CHIP}THEN
  419.         IF{RAMCHIP>PLAYER@}THEN
  420.             PRINT{TOBOR: "Hey, you don't have any RAMchips! Don't tease me like that!"}
  421.         EXIT
  422.         MOVE{RAMCHIP}TO{STORAGE@}
  423.         LET{X1#=10}
  424.         PRINT{TOBOR: "Wow, thanks pal! Man, I love those things! Here, let me give you a little something for that."}
  425.         PRINT{Tobor takes the RAMchip and swallows it eagerly, then hands you some coins. You now have $10!}
  426.     EXIT
  427.     PRINT{TOBOR: "No thanks, I couldn't really do anything with that. But I'd sure love some nice crunchy RAMchips!"}
  428. EXIT
  429.  
  430.  
  431. >>>If the player tries to give the robot anything other than the chip, the “chip” statement is ignored, and text is printed telling the player that the robot has rejected his offer, and would rather have a RAMchip.<<<